package polymorphic02;

/**
 * 向下转型
 *  格式:
 *    子类型 引用变量=(子类型)父类型引用变量
 */
class Person {
    public void eat() {
        System.out.println("吃东西");
    }
}

class Student extends Person {
    public void study() {
        System.out.println("学java");
    }
}

/**
 * 这个例子中我们只有一个学生对象
 * 但是这个学生对象扮演了两种角色,分别是人和学生
 * 当扮演人的角色的时候就具有人的行为
 * 当扮演学生的角色的时候就具有学生的行为
 */
public class Demo02 {
    public static void main(String[] args) {
         Person p= new Student();//我们把现实生活中的一个学生看成了一个人
                                 //类比基本数据类型: double d=3; //int=>double
                                 //把父类型看成大类型,把子类看成小类型
                                 //Student=>Person
         p.eat();//由于p指向的学生对象扮演的是人的角色,所以可以调用Person类中的方法
         //p.study();//由于p指向的学生对象扮演的是人的角色,但是Person类不具有学生的学习方法,不能调用

        System.out.println("----------------------");
        Student s=(Student) p;//类比基本数据类型:int i=(int)d //double=>int
                             //Person=>Student

        s.eat();//把s指向的学生对象扮演的是学生角色,所以可以调用学生类中的方法
        s.study();

    }
}
